/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package magazyn;

import commons.AbstractDAO;
import commons.DbConnection;
import data.Wydawnictwo;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author xxx
 */
public class DodawanieKsiazkiDAO extends AbstractDAO {
    
    public DodawanieKsiazkiDAO() {
        conn = DbConnection.getConnection();
    }
    
    public String dodajKsiazke(DodawanieKsiazkiData data) {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         try {
             Integer idAutora=0 , ile=0,idWydawnictwa=0;
             
                     query="select * from autorzy where nazwisko=? and imie=?";
                     prepStmt = conn.prepareStatement(query);
                     prepStmt.setString(1, data.getNazwiskoAutora());
                     prepStmt.setString(2, data.getImieAutora());
                     
                     rs= prepStmt.executeQuery();
                     
                      if(rs.next())
                      {
                         idAutora = rs.getInt("ident_autora");
                      }else
                      {
                           query="INSERT INTO biblioteka.autorzy ("
                                   + "ident_autora , "
                                   + "nazwisko , "
                                   + "imie ) "
                                   + "VALUES ( "
                                   + "NULL , "
                                   + "?, "
                                   + "?)";
                         prepStmt = conn.prepareStatement(query);
                         prepStmt.setString(1, data.getNazwiskoAutora());
                        prepStmt.setString(2, data.getImieAutora());
                        
                       ile = prepStmt.executeUpdate();
                       if(ile==0)
                       {
                           error("Nie udało się dodać autora");
                           return null;
                       }
                       error(idAutora.toString());
                       
                       
                        query="select * from autorzy where nazwisko=? and imie=?";
                         prepStmt = conn.prepareStatement(query);
                     prepStmt.setString(1, data.getNazwiskoAutora());
                     prepStmt.setString(2, data.getImieAutora());
                        rs= prepStmt.executeQuery();
                        
                        if(rs.next())
                        {
                            idAutora=rs.getInt("ident_autora");
                        }
                      }

                      
                      
                      
                      query="select * from wydawnictwa where nazwa_wydawnictwa=?";
                     prepStmt = conn.prepareStatement(query);
                     prepStmt.setString(1, data.getNazwaWydawnictwa());
                     
                     rs= prepStmt.executeQuery();
                     if(rs.next())
                     {
                        idWydawnictwa= rs.getInt("ident_wydawnictwa");
                     }else
                     {
                        
                         query="INSERT INTO biblioteka.wydawnictwa (ident_wydawnictwa , nazwa_wydawnictwa ) VALUES ( NULL , ?)";
                          prepStmt = conn.prepareStatement(query);
                        prepStmt.setString(1, data.getNazwaWydawnictwa());
                         ile = prepStmt.executeUpdate();
                       if(ile==0)
                       {
                           error("Nie udało się dodać wydawnictwa.");
                           return null;
                       }
                       
                        query="select * from wydawnictwa where nazwa_wydawnictwa=?";
                     prepStmt = conn.prepareStatement(query);
                     prepStmt.setString(1, data.getNazwaWydawnictwa());
                     
                     rs= prepStmt.executeQuery();
                     if(rs.next())
                     {
                        idWydawnictwa= rs.getInt("ident_wydawnictwa");
                     }
                       
                     }
                     
                     error(idWydawnictwa.toString());
                        query="INSERT INTO biblioteka.ksiazki ("
                                + "ident_ksiazki , "
                                + "numer_isbn , "
                                + "ident_autora , "
                                + "tytul , "
                                + "ident_wydawnictwa , "
                                + "data_wydania , "
                                + "status ) "
                                + "VALUES ( "
                                + "NULL , "
                                + "?, "
                                + "?, "
                                + "?,"
                                + "?, "
                                + "?, "
                                + "?)";
                        
                        prepStmt = conn.prepareStatement(query);
                        prepStmt.setString(1, data.getIsbn());
                        prepStmt.setInt(2, idAutora);
                        prepStmt.setString(3, data.getTytul());
                         prepStmt.setInt(4, idWydawnictwa);
                         System.out.println("data wydania : " + data.getDataWydania());
                          prepStmt.setString(5, sdf.format(data.getDataWydania()));
                       
                          prepStmt.setString(6, "dostępna");
                           ile=prepStmt.executeUpdate();
                           if(ile==0)
                               error("Nie udało się dodać książki.");
                           
                           if(ile>0)
                                  error("wstawiono");
                  
                } catch (SQLException ex) {
                    error(ex.getMessage());
                    Logger.getLogger(DodawanieKsiazkiDAO.class.getName()).log(Level.SEVERE, null, ex);
                }

           return null;
        
    }
    
    public void edycjaKsiazki(DodawanieKsiazkiData data) {
      
    }
    
    public String usunKsiazke(DodawanieKsiazkiData data) {
         try {
                     query="SELECT * FROM wypozyczenia where ident_ksiazki=?";
                    prepStmt = conn.prepareStatement(query);
                     prepStmt.setInt(1, data.getIdKsiazki());

                     rs= prepStmt.executeQuery();
                      if(rs.next())
                      {
                          error("Książka jest wypożyczona, nie można jej usunąć.");
                          return null;
                      }
                      
                        query="SELECT * FROM rezerwacje where ident_ksiazki=?";
                    prepStmt = conn.prepareStatement(query);
                     prepStmt.setInt(1, data.getIdKsiazki());

                     rs= prepStmt.executeQuery();
                     
                     if(rs.next())
                     {
                         error("Książka jest zarezerwowana, nie można jej usunąć.");
                         return null;
                     }
                     
                     query="delete from ksiazki where ident_ksiazki=?";
                      prepStmt = conn.prepareStatement(query);
                     prepStmt.setInt(1, data.getIdKsiazki());

                    Integer ile = prepStmt.executeUpdate();
                    if(ile==0)
                    {
                        error("Książka nie została usunięta.");
                        return null;
                    }
                  
                } catch (SQLException ex) {
                    error(ex.getMessage());
                    Logger.getLogger(DodawanieKsiazkiDAO.class.getName()).log(Level.SEVERE, null, ex);
                }

           return null;
        
    }
    
    ArrayList<PrzegladajAutoraData> getListaAutorow() {
        ArrayList<PrzegladajAutoraData> list = new ArrayList<PrzegladajAutoraData>();
        try {
            
            query = " select * from autorzy order by nazwisko ASC";
            Statement stat = conn.createStatement();
            rs = stat.executeQuery(query);
            
            while (rs.next()) {
                PrzegladajAutoraData data = new PrzegladajAutoraData();
                
                data.setIdAutora(rs.getInt("ident_autora"));
                data.setNazwisko(rs.getString("nazwisko"));
                data.setImie(rs.getString("imie"));
                
                list.add(data);
            }
            return list;
        } catch (SQLException ex) {
            error(ex.getMessage());
            Logger.getLogger(AbstractDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
        
    }
    
    ArrayList<Wydawnictwo> getListaWydawnictw() {
        try {
            ArrayList<Wydawnictwo> list = new ArrayList<Wydawnictwo>();
            query = " select * from wydawnictwa";
            Statement stat = conn.createStatement();
            rs = stat.executeQuery(query);
            
            while (rs.next()) {
                Wydawnictwo data = new Wydawnictwo();
                data.setIdWydawnictwa(rs.getInt("ident_wydawnictwa"));
                data.setNazwaWydawnictwa(rs.getString("nazwa_wydawnictwa"));
                
                
                list.add(data);
            }
            return list;
            
        } catch (SQLException ex) {
            error(ex.getMessage());
            Logger.getLogger(AbstractDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
        
    }
    
    
    
     public ArrayList<DodawanieKsiazkiData> getListaKsiazek(String tytul, String imie, String nazwisko)
            {
            ArrayList<DodawanieKsiazkiData> list = new ArrayList<DodawanieKsiazkiData>();
      
           
                try {
                      query ="SELECT k.ident_ksiazki, k.numer_isbn ,a.imie , a.nazwisko ,k.tytul , w.nazwa_wydawnictwa , k.data_wydania , k.status  FROM ksiazki k , autorzy  a, wydawnictwa  w "
                              + "WHERE tytul LIKE ? and imie LIKE ? and nazwisko LIKE ? "
                              + "and k.ident_autora = a.ident_autora and k.ident_wydawnictwa = w.ident_wydawnictwa";                    
                   
                    prepStmt = conn.prepareStatement(query);
                     prepStmt.setString(1, "%"+tytul+"%");
                     prepStmt.setString(2, "%"+imie+"%");
                     prepStmt.setString(3, "%"+nazwisko+"%");
                     rs = prepStmt.executeQuery();
                      //System.out.println("znak : " + s);
                     while(rs.next())
                     {
                         //System.out.println("zaiwra");
                         DodawanieKsiazkiData data = new DodawanieKsiazkiData ();
                         
                       data.setIdKsiazki(rs.getInt(1));
                       data.setIsbn(rs.getString(2));
                       data.setImieAutora(rs.getString(3));
                       data.setNazwiskoAutora(rs.getString(4));
                       data.setTytul(rs.getString(5));
                       data.setNazwaWydawnictwa(rs.getString(6));
                       data.setDataWydania(rs.getDate(7));
                       data.setStatus(rs.getString(8));
                       list.add(data);
                         
                     }
                    return list;
                    
                } catch (SQLException ex) {
                    Logger.getLogger(DodawanieKsiazkiDAO.class.getName()).log(Level.SEVERE, null, ex);
                }

           return null;
            }
    
    
    
    
    
    
}
